const express = require("express");
const axios = require("axios");
const cors = require("cors");
const { createProxyMiddleware } = require("http-proxy-middleware");

// 创建 express 实例
const app = express();

// 配置允许跨域
app.use(cors());

// // http://127.0.0.1:3000
// app.get("/", (req, res) => {
//   // 向 8001 的目标服务发请求
//   axios.get("http://127.0.0.1:8001").then((response) => {
//     // 得到 目标服务 的数据，response.data

//     // 响应
//     res.send(response.data);
//   });
// });

// // http://127.0.0.1:3000/admin/base/open/captcha
// app.get("/admin/base/open/captcha", (req, res) => {
//   // 向 8001 的目标服务发请求
//   axios
//     .get("http://127.0.0.1:8001/admin/base/open/captcha")
//     .then((response) => {
//       // 得到 目标服务 的数据，response.data

//       // 响应
//       res.send(response.data);
//     });
// });

/**
 * 上面的代码没有毛病，能实现我两个接口的请求都OK。
 * 但是目标服务的接口特别多，导致使用上面的代码，需要写很多。
 * 于是可以通过一款 express 中间件来处理（http-proxy-middleware）
 *
 *    1. 安装 http-proxy-middleware
 *    2. 引入
 *    3. 使用
 */

/**
 * 3000                          => 8001
 * 3000/admin/base/open/captcha  => 8001/admin/base/open/captcha
 * 3000/admin/base/open/login    => 8001/admin/base/open/login
 */
// app.use(
//   "/",
//   createProxyMiddleware({
//     // 代理中间件的配置项
//     target: "http://127.0.0.1:8001", // 目标服务
//   })
// );

/**
 * 3000         不会应用该中间件
 * 3000/abcd    不会应用该中间件
 * 3000/api                         => :8001/api
 * 3000/api/admin/base/open/captcha => :8001/api/admin/base/open/captcha
 * 3000/api/admin/base/open/login   => :8001/api/admin/base/open/login
 */
app.use(
  "/api",
  createProxyMiddleware({
    // 代理中间件的配置项

    // 目标服务
    target: "http://127.0.0.1:8001",
    // 路径重写
    // 3000/api                         => :8001
    // 3000/api/admin/base/open/captcha => :8001/admin/base/open/captcha
    // 3000/api/admin/base/open/login   => :8001/admin/base/open/login
    pathRewrite: {
      "^/api": "",
    },
  })
);

// 监听端口，启动服务
app.listen(3000, () => {
  console.log("3000 服务启动成功");
});
